// /**
//  * 数组转树  非递归求解
//  * 利用数组和对象相互引用  时间复杂度O(n)
//  * @param {Object} list
//  */
// export function buildTreeNormal(list,parId) {
//   let obj = {};
//   let result = [];
//   //将数组中数据转为键值对结构 (这里的数组和obj会相互引用)
//   list.map(el => {
//       obj[el.id] = el;
//   })
//   for(let i=0, len = list.length; i < len; i++) {
//       let id = list[i].parentId;
//       if(id == parId) {
//           result.push(list[i]);
//           continue;
//       }
//       if(obj[id].children) {
//           obj[id].children.push(list[i]);
//       } else {
//           obj[id].children = [list[i]];
//       }
//   }
//   return result;
// }

// /**
// * 数组转树  递归求解
// */
// export function buildTreeRecursion(list,parId){
// let len = list.length
// function loop(parId){
//   let res = [];
//   for(let i = 0; i < len; i++){
//     let item = list[i]
//     if(item.parentId === parId){
//       item.children = loop(item.id)
//       res.push(item)
//     }
//   }
//   return res
// }
// return loop(parId)
// }

// /**
// * 树转数组扁平化结构
// * 深度优先遍历  堆栈  后进先出
// */
// export function flatTreeNormal(node){
// let stack = node,
//   data = [];
//   while(stack.length != 0){
//     let pop = stack.pop();
//     data.push({
//       id: pop.id,
//       name: pop.name,
//       parentId: pop.parentId
//     })
//     let children = pop.children
//     if(children){
//       for(let i = children.length-1; i >=0; i--){
//         stack.push(children[i])
//       }
//     }
//   }
//   return data
// }

/**
* 树转数组扁平化结构
* 深度优先遍历  递归
*/
export function flatTreeRecursion(data) {
  const result = []
  data.forEach(item => {
    const loop = data => {
      result.push({
        id: data.id,
        name: data.name,
        parentId: data.parentId
      })
      const child = data.children
      if (child) {
        for (let i = 0; i < child.length; i++) {
          loop(child[i])
        }
      }
    }
    loop(item)
  })
  return result
}

// /**
// * 广度优先
// * 队列  先进先出
// */
// export function wideTraversal(node){
//   let stack = node,
//   data = [];
//   while(stack.length != 0){
//     let shift = stack.shift();
//     data.push({
//       id: shift.id,
//       name: shift.name,
//       parentId: shift.parentId
//     })
//     let children = shift.children
//     if(children){
//       for(let i = 0; i < children.length; i++){
//         stack.push(children[i])
//       }
//     }
//   }
//   return data
// }
